﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BE_CruzDelSur;
using System.Data.SqlClient;
using System.Data;
using BR_CruzDelSur.Interfaces;

namespace BR_CruzDelSur
{
    public class BR_GuiaRemision : IBR_GuiaRemision
    {
        Conexion conn = new Conexion();
        IBR_Util EEstado = new BR_Util();
        IBR_Carga ECarga = new BR_Carga();

        public BE_GuiaRemision f_obtenerDatosGuia(string codigosCarga)
        {
            SqlParameter[] param = new SqlParameter[1];
            param[0] = new SqlParameter("INT_CODIGO_GUIA", SqlDbType.Int);
            param[0].Value = codigosCarga;
            param[0].Direction = ParameterDirection.Input;

            DataSet ds = SqlHelper.ExecuteDataSet(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_OBTENERGUIA", param);

            BE_GuiaRemision entidad;
            foreach (DataRow item in ds.Tables[0].Rows)
            {
                return new BE_GuiaRemision()
                {
                    CodigoGuia = Convert.ToInt32(item["INT_CODIGO_GUIA"].ToString()),
                    FechaOrigen = Convert.ToDateTime(item["DTM_FECHA_TRASLADO"].ToString()).ToString("dd/MM/yyyy"),
                    CodigoProgramacionRuta = Convert.ToInt32(item["INT_CODIGO_PROGRAMACION_RUTA"].ToString())               
                };
            }
            return null;
        }

        public bool f_obtenerGuia(string codigosCarga)
        {
            SqlParameter[] param = new SqlParameter[1];
            param[0] = new SqlParameter("INT_CODIGO_GUIA", SqlDbType.Int);
            param[0].Value = codigosCarga;
            param[0].Direction = ParameterDirection.Input;

            DataSet ds = SqlHelper.ExecuteDataSet(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_VERIFICARGUIA", param);

            return (ds.Tables[0].Rows.Count > 0) ;
        }

        public bool f_eliminarGuia(string codigosCarga)
        {
            SqlParameter[] param = new SqlParameter[1];
            param[0] = new SqlParameter("INT_CODIGO_GUIA", SqlDbType.Int);
            param[0].Direction = ParameterDirection.Input;
            param[0].Value = codigosCarga;

            try
            {
                SqlHelper.ExecuteNonQuery(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_ELIMINARGUIA", param);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }            
        }

        public List<BE_GuiaRemision> f_ListarGuiaRemision(string fecha, int guia)
        {
            List<BE_GuiaRemision> lst = new List<BE_GuiaRemision>();

            SqlParameter[] param = new SqlParameter[2];
            param[0] = new SqlParameter("VCH_FECHA", SqlDbType.VarChar);
            param[0].Value = fecha;
            param[0].Direction = ParameterDirection.Input;
            param[1] = new SqlParameter("INT_CODIGO_GUIA", SqlDbType.Int);
            param[1].Value = guia;
            param[1].Direction = ParameterDirection.Input;

            DataSet ds = SqlHelper.ExecuteDataSet(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_LISTARGUIAS", param);

            BE_GuiaRemision entidad;
            foreach (DataRow item in ds.Tables[0].Rows)
            {
                entidad = new BE_GuiaRemision()
                {
                    CodigoGuia = Convert.ToInt32(item["INT_CODIGO_GUIA"].ToString()),
                    LugarOrigen = item["ORIGEN"].ToString(),
                    LugarDestino = item["DESTINO"].ToString(),
                    FechaOrigen = Convert.ToDateTime(item["DTM_FECHA_TRASLADO"].ToString()).ToString("dd/MM/yyyy")
                };
                lst.Add(entidad);
            }

            return lst;
        }
        public int f_ActualizarGuiaRemision(string codigosCarga, int codigoGuia)
        {
            ECarga.f_LimpiarCargaGuiaRemision(codigoGuia);

            codigosCarga = codigosCarga.Replace("*", "");

            if (codigosCarga.Trim() != "")
                codigosCarga = codigosCarga.Substring(0, codigosCarga.Length - 1);

            var codigos = codigosCarga.Split(',');

            foreach (var item in codigos)
            {
                ECarga.f_ActualizarCargaGuiaRemision(codigoGuia, item);
            }

            return codigoGuia;
        }

        public int f_InsertarGuiaRemision(string codigosCarga)
        {
            SqlParameter[] param = new SqlParameter[1];
            param[0] = new SqlParameter("INT_CODIGO_GUIA", SqlDbType.Int);
            param[0].Direction = ParameterDirection.Output;

            SqlHelper.ExecuteNonQuery(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_INSERTARGUIA", param);

            int codigoGuia = Convert.ToInt16(param[0].Value);

            codigosCarga = codigosCarga.Replace("*", "");

            if (codigosCarga.Trim() != "")
                codigosCarga = codigosCarga.Substring(0, codigosCarga.Length - 1);

            var codigos = codigosCarga.Split(',');

            foreach (var item in codigos)
            {
                ECarga.f_ActualizarCargaGuiaRemision(codigoGuia, item);
            }

            return codigoGuia;
        }

        public List<BE_GuiaRemision> f_ListarCargasArribarXGuia(string fechaPartida, string fechaLlegada, int origen, int destino, string estado, int guia)
        {
            List<BE_GuiaRemision> lst = new List<BE_GuiaRemision>();
            SqlParameter[] param = new SqlParameter[6];
            param[0] = new SqlParameter("DTM_FECHA_LLEGADA", SqlDbType.VarChar);
            param[0].Value = fechaPartida;
            param[0].Direction = ParameterDirection.Input;
            param[1] = new SqlParameter("DTM_FECHA_SALIDA", SqlDbType.VarChar);
            param[1].Value = fechaLlegada;
            param[1].Direction = ParameterDirection.Input;
            param[2] = new SqlParameter("INT_UBIGEO_ORIGEN", SqlDbType.Int);
            param[2].Value = origen;
            param[2].Direction = ParameterDirection.Input;
            param[3] = new SqlParameter("INT_UBIGEO_DESTINO", SqlDbType.Int);
            param[3].Value = destino;
            param[3].Direction = ParameterDirection.Input;
            param[4] = new SqlParameter("CHR_ESTADO", SqlDbType.VarChar);
            param[4].Value = estado;
            param[4].Direction = ParameterDirection.Input;
            param[5] = new SqlParameter("INT_GUIA", SqlDbType.Int);
            param[5].Value = guia;
            param[5].Direction = ParameterDirection.Input;

            DataSet ds = SqlHelper.ExecuteDataSet(conn.CadenaConexion, System.Data.CommandType.StoredProcedure, "SP_LISTARCARGAXGUIA", param);

            BE_GuiaRemision entidad;
            foreach (DataRow item in ds.Tables[0].Rows)
            {
                entidad = new BE_GuiaRemision() 
                { 
                    CodigoCarga = Convert.ToInt32(item["INT_CODIGO_CARGA"].ToString()),
                    CodigoGuia = Convert.ToInt32(item["INT_CODIGO_GUIA"].ToString()), 
                    LugarOrigen = item["ORIGEN"].ToString(), 
                    LugarDestino = item["DESTINO"].ToString(), 
                    FechaOrigen = Convert.ToDateTime(item["DTM_FECHA_ORIGEN"].ToString()).ToString("dd/MM/yyyy"),
                    FechaDestino = Convert.ToDateTime(item["DTM_FECHA_DESTINO"].ToString()).ToString("dd/MM/yyyy"),
                    Bus = item["VCH_MARCA"].ToString() + " " + item["VCH_MODELO"].ToString() + " " + item["VCH_PLACA"].ToString(),
                    TipoTransporte = item["TIPOTRANSPORTE"].ToString(),
                    estadoCarga = item["ESTADO_CARGA"].ToString(),
                };
                lst.Add(entidad);
            }

            return lst;
        }
    }
}
